#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>


typedef int LDataType;

typedef struct ListNode
{
    LDataType data;
    struct ListNode* next;
    struct ListNode* prev;
}ListNode;

ListNode* InitDList();
void PrinList(ListNode* head);
ListNode* BuyListNode(LDataType x);

void DLPushBack(ListNode* head,LDataType x); 
void DLPushFront(ListNode* head,LDataType x);

void DLPopBack(ListNode* head);
void DLPopFront(ListNode* head);


ListNode* DLFind(ListNode* phead, LDataType x);
void DLInsert(ListNode* pos, LDataType x);
void DLErase(ListNode* pos);

bool DLEmpty(ListNode* phead);
size_t DLSize(ListNode* phead);
void DLDestroy(ListNode* phead);